[LOJ6079]-养猫(线性规划转费用流)
先做了 志愿者招募,一样的套路——线性规划转费用流。
先钦定所有时间吃东西,然后选一些时刻变成睡觉。xi=0/1 表示 i 时刻是否睡觉,是的话代价为 si−ei。
可以列出不等式组:
x1+⋯+xk≥msx1+⋯+xk≤k−me⋯xn−k+1+⋯+xn≤k−me变成标准型(就是不等号变等号):
x1+⋯+xk=ms+y1x1+⋯+xk=k−me−z1⋯xn−k+1+⋯+xn=k−me−zn−k+1线性规划转费用流要求每个变量恰好出现一次为正、一次为负,于是添加一个等式 0=0 并两两做差:
x1+⋯+xk=ms+y1y1+z1=k−ms−mexk+1+(k−ms−me)=x1+z1+y2⋯k−me=xn−k+1+⋯+xn+zn−k+1这一类线性规划转费用流的建模方法,是把等式看作点,等式平衡对应网络流中的流量平衡。
那么每个变量看作流,为正则是入,为负则是出。从出的等式向入的等式连 (cap,val) 的边。例如本题中 xi 连边为 (1,si−ei),而 yi, zi 等辅助变量连边为 (∞,0)。
对于常数(设为 c)也要处理,为正则视为源点发出给你的,为负则视为你发出给汇点的:(|c|,0)。
正确性怎么理解呢qwq?最大流跑完了,每个点的等式都被满足
回到本题,由于第一个等式的常数 ms 在等式右边,我们把右边看作入,跑最大费用流就完事了。